热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

TiDB|TiDB在5A级物流企业核心系统的应用与实践

TiDB在5A级物流企业核心系统的应用与实践前言一、业务背景科捷物流概况神州金库简介二、现状与挑战神州金库现有技术体系业务挑战应对方案三、TiDB解决方案测试迁移收益问题四、说在最




TiDB在5A级物流企业核心系统的应用与实践


  • 前言
  • 一、业务背景
    • 科捷物流概况
    • 神州金库简介

  • 二、现状与挑战
    • 神州金库现有技术体系
    • 业务挑战
    • 应对方案

  • 三、TiDB解决方案
    • 测试
    • 迁移
    • 收益
    • 问题

  • 四、说在最后



前言

历经了近半年的测试验证和迁移准备,神州金库3.0核心系统 WMS 正式从 MySQL 迁移到了分布式 HTAP 数据库 TiDB,上线后不久就经历了第一次双11的考验,TiDB 的性能和稳定性表现远超预期,给后续的全平台迁移计划打下了坚实的基础。

神州数码 TiDB 交付团队与科捷物流技术、业务团队紧密配合,完全自主化地实施了整个迁移过程,成为团队在又一新行业成功交付的典型案例。

下面我们就来具体看看吧~


一、业务背景

科捷物流概况

北京科捷物流有限公司于2003年在北京正式成立,是ISO质量管理体系认证企业、国家AAAAA级物流企业、海关AEO高级认证企业,注册资金1亿元,是中国领先的大数据科技公司——神州控股的全资子公司。

科捷物流融合B2B和B2C的客户需求,基于遍布全国的物流网络与自主知识产权的物流管理系统,为客户提供定制化的一站式供应链服务,在全国拥有231个仓储中心,总面积超100万平方米,年运送货值超5000亿元,日发送包裹超40万个,并在IT、通讯、精密仪器、汽车配件及电商物流领域处于行业领先地位。

在这里插入图片描述


神州金库简介

神州金库(KINGKOO)是科捷物流结合二十年物流运营经验自主研发,支持云服务模式、实时数据接口的专业物流管理平台,包含有四大核心子系统:

订单管理系统(OMS)

仓储管理系统(WMS)

运输管理系统(TMS)

物流核算系统(BMS)

神州金库实现了物流业务体系的数字化全覆盖,为客户提供了一体化的供应链系统解决方案。

图片
神州金库平台经过十几年的更新迭代,支撑了科捷物流自营仓储体系、众多电商平台商家、第三方物流公司的核心业务,积累了庞大的数据量。

为应对持续增长的业务规模,以及每年多次的电商大促活动,急需寻找更加高效高性能的数据存储方案。


二、现状与挑战

神州金库现有技术体系

神州金库服务端采用微服务架构体系设计,不同的业务模块采用独立的集群部署模式。技术栈基于Java Spring框架构建。数据库目前主要使用 MySQL 主从集群,多台高性能物理机部署,通过 MyCat 做代理层进行读写请求转发。前端接入了多种不同的客户端形态,包括Web、APP、IoT设备、扫描枪、计重器、机器人、报表、第三方API等等。

图片


业务挑战

1、数据量激增带来一系列影响

随着数据量的持续快速增长,MySQL 的存储容量即将达到上限,SQL 响应时间开始变慢,业务受到影响。

如果维持现有的技术架构,下一步势必要引入分表机制,同时扩展容量更大的集群,这其中数据迁移就是非常大的工程量,应用端还要引入额外的 sharding 中间件进行改造,后续数据库维护成本和难度成倍上升。

2、数据报表和分析需求凸显

其次,大量的数据报表和分析需求凸显,仅仅依靠 MySQL 从库提供分析查询能力,效率已经达不到业务需求。某些场景下汇总数据的时效性要求非常高,直接影响到下一步的业务决策,引入传统的T+1离线分析方案无法满足。

3、高并发挑战

除此之外,在应对电商大促场景下需要数据库提供足够的并发能力,响应比平时多出几十倍的流量高峰,同时数据库还可以保证稳定的性能。在平时业务量较小的时候,需要缩减配置控制成本,达到弹性易于扩展的目的。


应对方案

基于以上需求,技术团队决定引入分布式数据库代替 MySQL 单机数据库。

在充分考虑了应用和数据双方面迁移难度,以及一系列 POC 验证后,选择使用 TiDB 来替换 MySQL,并用神州金库的核心子系统 WMS 作为首期试点项目。

选择使用 TiDB 的主要因素有:

语法层面高度兼容 MySQL,应用端代码中没有使用 TiDB 不支持的特性, 最小程度减少应用改造成本,更换数据库连接串即可。

存储计算分离架构能够满足弹性扩展需求,针对不同时期的业务量动态调整节点达到所需的性能和容量,还可以把不同业务单元的 MySQL 库合并到一个 TiDB 集群中,自带高可用特性省去了 MySQL 从库的硬件成本,数据库维护起来简单高效。

一站式 HTAP 体验,同时满足交易型和分析性业务场景,且对应用端透明。

开源产品,技术社区活跃,产品迭代快,碰到问题容易解决。


三、TiDB解决方案

测试

为赶在双11之前完成迁移任务,我们做前期做了充足的测试工作,包括应用兼容性测试和改造、多轮带实际业务的压力测试、模拟未来数十倍数据量的性能测试、稳定性测试、高可用测试、生产迁移演练等。

在压测中选取了仓储业务中最核心的出库流程,一共包含6个场景,分别是创建出库单、调度、创建波次、单据复核、单据交接、交接确认。

其中稳定性测试过程中除了使用传统的长时间高压业务负载,还引入了 Chaos Mesh 混沌测试,对CPU、内存、网络等发生异常情况进行模拟,观察 TiDB 在测试期间的表现。从监控显示,压测期间资源使用率和数据库响应时间都非常稳定。
在这里插入图片描述


迁移

生产环境TiDB集群部署架构和数据迁移流程如下图所示:
图片
在 TiDB 集群部署完成后,使用官方提供的数据迁移工具 TiDB Data Migration(DM)开始把全量和增量数据同步到 TiDB 中。

然后找一个业务低峰期切断应用端到 MySQL 的流量,待 DM 把数据追平后使用校验工具 Sync-Diff 对上下游数据做一致性检查,校验完成开启 TiDB 到 MySQL 的回退链路,防止切换出现故障可以随时回滚到 MySQL。

验证 TiDB Binlog 同步正常以后把应用端数据库连接切换到 TiDB 代理层的VIP,通过 HAProxy 转发请求到 TiDB 计算层。


收益

迁移之后经过一个月的观察和调整,各方面的性能指标都很稳定,P99 延时基本在100ms以下,服务器资源使用率普遍较低,各节点压力均衡。

10月31日晚上9点左右,迎来了双11的第一轮业务高峰期,一直持续到11月3日,在这期间 P99 延时没有明显波动,但是集群 QPS 较平时上涨了5-8倍,最高峰值达到1万多。
在这里插入图片描述
在11月1日和11月11日两轮业务高峰期,TiDB 均表现得非常稳定,没有发生任何故障和性能问题。本次迁移的 WMS 3.0在双11期间的流量约占整个金库系统的10%,基于目前 TiDB 的优秀表现,我们有充足的信心把所有业务系统逐步迁移到 TiDB。

短期来看,TiDB 可能需要投入较高的硬件成本,但是随着数据规模增长,TiDB 的性价比会大幅提升。

首先 TiDB 的数据压缩比非常高,三副本所需要的存储空间远低于三台 MySQL 主从节点,这意味着三台 TiKV 可以存储比 MySQL更多的数据。

其次,要提高数据库整体并发能力只需要增加 TiDB Server 节点, 要扩展数据库容量只需要增加 TiKV 节点,从运维成本和硬件成本都要低于 MySQL。


问题

1、SQL 行为一致性问题

从单机数据库到分布式数据库,除了语法层面的兼容性之外,我们还需要关注相同的 SQL 表现行为是否一致。

例如在早期的测试中发现,当不显式指定排序字段时,MySQL 查询结果能得到固定的顺序,但是在 TiDB 中就会出现结果集顺序不稳定的情况。

这主要是分布式特性带来的表现差异。TiDB 会把扫描数据的请求并行下发给多个 TiKV 节点,如果没有强制使用排序字段,受 TiKV 返回数据时间不一致的影响,最终的汇总结果必然没办法保证顺序,这就要求业务开发过程中要保持良好的 SQL 编写规范。

2、热点问题

再就是使用 TiDB 普遍会遇到的热点问题,上线初期由于某张表的索引建立不当,导致某个索引读热点问题非常严重,高峰期能达到100多G/min的流量。
图片

我们从三个方向进行了优化:

首先找到热点所在的 Region 尝试做切分,会有短暂的效果,但是受 Region 调度影响读热点依旧存在。

然后尝试了自动化 Load Base Split,发现效果也不好。

最后回归 SQL 本身,仔细分析了业务查询逻辑和索引使用情况,重新调整索引后有了明显效果,但由于这是一个业务上小于当前时间的范围查询,某些 Region 的负载还是会高一些 ,再配合定期扫描 Region 流量超出阈值做切分的脚本,热点问题得到完美解决。
图片

3、TiDB自身问题

此外还碰到了 TiDB 产品本身的bug,我们生产环境使用了v5.3.2版本,在该版本下当 limit offset 值特别大的时候,如果此时碰上 IndexHashJoin 会导致 Session 处于假死状态,并且持续占用 TiDB 节点内存无法释放,同时也无法kill。

早期因为这个问题出现过几次 TiDB 节点 OOM 的情况,只能不定期重启 TiDB Server 解决。经过仔细分析排查后定位到这是产品bug,可以通过 HashJoin 关联方式绕过,最后用 SQL Binding 的形式临时处理掉了。不过业务上这样的 SQL 比较多,目前依然存在这个问题,计划通过版本升级的方式(v5.4.3)彻底解决。


四、说在最后

整体来说,此次 WMS 3.0系统迁移非常顺利,各方面都能够满足预期,我们也期待未来把更多的业务系统接入到 TiDB 中,在更多场景中感受分布式数据库带来的魅力,助力业务的高速增长。

我们致力于用数字技术重构企业价值,助力企业实现数字化转型升级!

更多交流,欢迎联系我们~







推荐阅读
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了软件测试知识点之数据库压力测试方法小结相关的知识,希望对你有一定的参考价值。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 云原生应用最佳开发实践之十二原则(12factor)
    目录简介一、基准代码二、依赖三、配置四、后端配置五、构建、发布、运行六、进程七、端口绑定八、并发九、易处理十、开发与线上环境等价十一、日志十二、进程管理当 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 本文介绍了OpenStack的逻辑概念以及其构成简介,包括了软件开源项目、基础设施资源管理平台、三大核心组件等内容。同时还介绍了Horizon(UI模块)等相关信息。 ... [详细]
  • Centos下安装memcached+memcached教程
    本文介绍了在Centos下安装memcached和使用memcached的教程,详细解释了memcached的工作原理,包括缓存数据和对象、减少数据库读取次数、提高网站速度等。同时,还对memcached的快速和高效率进行了解释,与传统的文件型数据库相比,memcached作为一个内存型数据库,具有更高的读取速度。 ... [详细]
  • ElasticSerach初探第一篇认识ES+环境搭建+简单MySQL数据同步+SpringBoot整合ES
    一、认识ElasticSearch是一个基于Lucene的开源搜索引擎,通过简单的RESTfulAPI来隐藏Lucene的复杂性。全文搜索,分析系统&# ... [详细]
  • [翻译]微服务设计模式5. 服务发现服务端服务发现
    服务之间需要互相调用,在单体架构中,服务之间的互相调用直接通过编程语言层面的方法调用就搞定了。在传统的分布式应用的部署中,服务地 ... [详细]
  • 云原生SRE
    序言年底了,没有分手的朋友的赶紧分了,所谓新年新气象,年年不重样。去留无意,望看风卷残云。。。运维不会消失,但 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文详细介绍了云服务器API接口的概念和作用,以及如何使用API接口管理云上资源和开发应用程序。通过创建实例API、调整实例配置API、关闭实例API和退还实例API等功能,可以实现云服务器的创建、配置修改和销毁等操作。对于想要学习云服务器API接口的人来说,本文提供了详细的入门指南和使用方法。如果想进一步了解相关知识或阅读更多相关文章,请关注编程笔记行业资讯频道。 ... [详细]
  • 2021最新总结网易/腾讯/CVTE/字节面经分享(附答案解析)
    本文分享作者在2021年面试网易、腾讯、CVTE和字节等大型互联网企业的经历和问题,包括稳定性设计、数据库优化、分布式锁的设计等内容。同时提供了大厂最新面试真题笔记,并附带答案解析。 ... [详细]
author-avatar
香港冫耐思得
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有